package cn.itsource.basic.controller;

import cn.itsource.basic.service.IVerificationCodeService;
import cn.itsource.basic.util.AjaxResult;
import cn.itsource.user.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 验证码controller
 */
@RestController
@RequestMapping("/verification")
public class VerificationCodeController {

    @Autowired
    private IVerificationCodeService verificationCodeService;

    /**
     * 发送手机验证码业务逻辑：
     *          1.获取它的手机号
     *          2.随机产生验证码
     *          3.发送验证码
     *          4.产生的验证码要放到redis中
     *
     * 市面上产生的验证码一般有2大业务逻辑：
     *              1.有效期1分钟，然后超过了1分钟重新发送验证码，产生全新的验证码，如果在1分钟以内发送了多次--》提示用户，1分钟以内不能发送多次验证码
     *
     *              2.产生的验证码有效期是5分钟，如果在1分钟以内点击了多次按钮，就提示用户，一分钟以内不能发送多次验证码，如果超过了1分钟，但在
     *              5分钟以内，依然使用第一次产生的验证码，如果超过了5分钟就发送全新的验证码(采纳)
     *
     *
     *
     * @param user
     * @return
     */
    @PostMapping("/sendMobileCode")
    public AjaxResult sendMobileCode(@RequestBody User user){
        try {
            //通过手机号码发送验证码
            verificationCodeService.sendUserRegMobileCode(user.getPhone());
            return AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false, e.getMessage());
        }
    }


    /**
     * 手机号和微信进行绑定发送的验证码
     * @param user
     * @return
     */
    @PostMapping("/sendBinderMobileCode")
    public AjaxResult sendBinderMobileCode(@RequestBody User user){
        try {
            //通过手机号码发送验证码
            verificationCodeService.sendBinderMobileCode(user.getPhone());
            return AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false, e.getMessage());
        }
    }
}
